﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using ClasesLibreria.dominio;

namespace ClasesLibreria.dao
{
    public static class DAOProducto
    {
        public static SqlDataReader queryProductos(string connectionString, string stringOrderBy)
        {
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand("SELECT prd.codigoproducto producto_codigo, " +
       "prd.nombre producto_nombre,  " +
       "prd.stockminimo, " +
       "prd.stockactual,  " +
       "prd.precioventa,  " +
       "prd.fechaalta, " +
       "prd.fechabaja,  " +
       "prd.preciocompra, " +
       "prd.idmarcaproducto,  " +
       "mcp.nombreproducto marca_nombre " +
"FROM producto prd, marcaproducto mcp " +
"WHERE prd.idmarcaproducto = mcp.idmarcaproducto");
            cmd.Connection = conn;
            dr = cmd.ExecuteReader();
            return dr;
        }

        public static Producto queryProductoByCodigo(string connectionString, int codigoProducto)
        {
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;
            Producto prd = new Producto();


            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand("SELECT prd.codigoproducto producto_codigo, " +
                                 "       prd.nombre producto_nombre,  " +
                                 "       prd.stockminimo, " +
                                 "       prd.stockactual,  " +
                                 "       prd.precioventa,  " +
                                 "       prd.fechaalta, " +
                                 "       prd.fechabaja,  " +
                                 "       prd.preciocompra, " +
                                 "       prd.idmarcaproducto,  " +
                                 "       mcp.nombreproducto marca_nombre " +
                                 " FROM producto prd, marcaproducto mcp " +
                                 "WHERE prd.idmarcaproducto = mcp.idmarcaproducto " +
                                 "  AND prd.codigoproducto = @codigoproducto");
            cmd.Connection = conn;
            cmd.Parameters.Add(new SqlParameter("@codigoproducto", codigoProducto));
            dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                prd.Codigo = dr.GetInt32(0);
                prd.Nombre = dr.GetString(1);
                prd.StockMinimo = dr.GetInt32(2);
                prd.StockActual = dr.GetInt32(3);
                prd.PrecioVenta = dr.GetFloat(4);
                prd.FechaAlta = dr.GetDateTime(5);
                //prd.FechaBaja = dr.GetDateTime(6);
                prd.PrecioCompra = dr.GetFloat(7);

                MarcaProducto mcp = new MarcaProducto();
                mcp.Id = dr.GetInt32(8);
                mcp.Nombre = dr.GetString(9);

                prd.Marca = mcp;
            }

            return prd;
        }

        public static List<Producto> getListProductosByProveedor(int idProveedor, string connectionString)
        {
            List<Producto> productos = new List<Producto>();
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand(
                                    "SELECT prd.CodigoProducto, prd.IdMarcaProducto, prd.Nombre, prd.StockMinimo, " +
                                    "       prd.StockActual, prd.PrecioVenta, prd.FechaAlta, prd.FechaBaja, prd.PrecioCompra " +
                                    "  FROM Producto prd, ProveedorxProducto ppp " +
                                    " WHERE ppp.IdProveedor = @IdProveedor " +
                                    "   AND prd.CodigoProducto = ppp.CodigoProducto ");
            cmd.Connection = conn;
            cmd.Parameters.Add(new SqlParameter("@IdProveedor", idProveedor));
            dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                Producto prd = new Producto();
                prd.Codigo = int.Parse(dr["CodigoProducto"].ToString());
                prd.Nombre = dr["Nombre"].ToString();
                prd.Marca = DAOMarca.getById(int.Parse(dr["IdMarcaProducto"].ToString()), connectionString);
                prd.PrecioCompra = float.Parse(dr["PrecioCompra"].ToString());
                prd.PrecioVenta = float.Parse(dr["PrecioVenta"].ToString());
                prd.StockActual = double.Parse(dr["StockActual"].ToString());
                prd.StockMinimo = double.Parse(dr["StockMinimo"].ToString());
                prd.FechaAlta = DateTime.Parse(dr["FechaAlta"].ToString());

                DateTime temp;
                if (DateTime.TryParse(dr["FechaBaja"].ToString(), out temp))
                {
                    prd.FechaBaja = temp;
                }

                productos.Add(prd);
            }

            return productos;
        }
    }
}
